source("Analyses.R")
## Registered S3 method overwritten by 'rmutil':
##   method         from
##   print.response httr
## Find out more at https://www.synthpop.org.uk/
## Loading required package: future
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ readr     2.1.5     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Loading required package: viridisLite
## 
## 
## Attaching package: 'plotly'
## 
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## 
## The following object is masked from 'package:graphics':
## 
##     layout
## 
## 
## 
## Attaching package: 'pracma'
## 
## 
## The following objects are masked from 'package:tictoc':
## 
##     clear, size, tic, toc
## 
## 
## The following object is masked from 'package:purrr':
## 
##     cross
## 
## 
## 
## Attaching package: 'rmarkdown'
## 
## 
## The following object is masked from 'package:future':
## 
##     run
## List of 7
##  $ sample    :List of 500
##  $ cart      :List of 500
##  $ ctree     :List of 500
##  $ parametric:List of 500
##  $ bag       :List of 500
##  $ rf        :List of 500
##  $ original  :'data.frame':  4603 obs. of  22 variables:
##   ..- attr(*, "na.action")= 'omit' Named int [1:363] 15 16 59 60 87 105 195 205 209 224 ...
##   .. ..- attr(*, "names")= chr [1:363] "15" "16" "59" "60" ...

Vue d’ensemble

analyses$table_cat
## # A tibble: 378 × 13
## # Groups:   variable [16]
##    variable modalites freq_min freq_max freq_mean freq_sd freq_cv freq_median
##    <chr>    <fct>        <int>    <int>     <dbl>   <dbl>   <dbl>       <dbl>
##  1 agegr    16-24          568      720      649.    24.2 0.0372          650
##  2 agegr    25-34          630      756      684.    22.8 0.0333          684
##  3 agegr    35-44          644      808      703.    23.0 0.0327          702
##  4 agegr    45-59         1161     1334     1245.    29.7 0.0239         1246
##  5 agegr    60-64          417      530      476.    20.2 0.0425          477
##  6 agegr    65+            780      917      846.    26.7 0.0315          846
##  7 alcabuse YES            245      338      299.    15.6 0.0522          299
##  8 alcabuse NO            4265     4358     4304.    15.6 0.00363        4304
##  9 alcsol   YES            123      189      156.    12.4 0.0793          156
## 10 alcsol   NO            4414     4480     4447.    12.4 0.00278        4447
## # ℹ 368 more rows
## # ℹ 5 more variables: freq_q1 <dbl>, freq_q3 <dbl>, freq_q025 <dbl>,
## #   freq_q975 <dbl>, methode <chr>
analyses$table_mean_num
## # A tibble: 6 × 61
##   age_min age_max age_mean age_sd  age_cv age_median age_q1 age_q3 age_q025
##     <dbl>   <dbl>    <dbl>  <dbl>   <dbl>      <dbl>  <dbl>  <dbl>    <dbl>
## 1    46.6    48.2     47.5  0.279 0.00588       47.4   47.3   47.7     47.0
## 2    46.6    48.2     47.5  0.279 0.00588       47.4   47.3   47.7     47.0
## 3    46.6    48.2     47.5  0.279 0.00588       47.4   47.3   47.7     47.0
## 4    46.6    48.2     47.5  0.279 0.00588       47.4   47.3   47.7     47.0
## 5    46.6    48.2     47.5  0.279 0.00588       47.4   47.3   47.7     47.0
## 6    46.6    48.2     47.5  0.279 0.00588       47.4   47.3   47.7     47.0
## # ℹ 52 more variables: age_q975 <dbl>, depress_min <dbl>, depress_max <dbl>,
## #   depress_mean <dbl>, depress_sd <dbl>, depress_cv <dbl>,
## #   depress_median <dbl>, depress_q1 <dbl>, depress_q3 <dbl>,
## #   depress_q025 <dbl>, depress_q975 <dbl>, nofriend_min <dbl>,
## #   nofriend_max <dbl>, nofriend_mean <dbl>, nofriend_sd <dbl>,
## #   nofriend_cv <dbl>, nofriend_median <dbl>, nofriend_q1 <dbl>,
## #   nofriend_q3 <dbl>, nofriend_q025 <dbl>, nofriend_q975 <dbl>, …

Correlations

analyses$cor_comp
## $sample
##                 age    depress   nofriend     height     weight        bmi
## age      0.00000000 0.63147506 0.04816559 0.29474835 0.14432612 0.34027067
## depress  0.63147506 0.00000000 0.09723474 0.26871532 0.03145997 0.20112105
## nofriend 0.04816559 0.09723474 0.00000000 0.08190366 0.05873079 0.01663399
## height   0.29474835 0.26871532 0.08190366 0.00000000 0.49396542 0.08285834
## weight   0.14432612 0.03145997 0.05873079 0.49396542 0.00000000 0.81735280
## bmi      0.34027067 0.20112105 0.01663399 0.08285834 0.81735280 0.00000000
## 
## $cart
##                   age      depress    nofriend       height       weight
## age      0.000000e+00 0.0034625067 0.007126650 0.0001931979 8.584560e-06
## depress  3.462507e-03 0.0000000000 0.020201859 0.0007591334 1.292374e-03
## nofriend 7.126650e-03 0.0202018586 0.000000000 0.0157008276 9.708402e-03
## height   1.931979e-04 0.0007591334 0.015700828 0.0000000000 2.835172e-03
## weight   8.584560e-06 0.0012923743 0.009708402 0.0028351716 0.000000e+00
## bmi      5.814970e-03 0.0039337433 0.001577024 0.0247964247 7.982318e-04
##                   bmi
## age      0.0058149701
## depress  0.0039337433
## nofriend 0.0015770245
## height   0.0247964247
## weight   0.0007982318
## bmi      0.0000000000
## 
## $ctree
##                   age     depress   nofriend      height       weight
## age      0.0000000000 0.004433319 0.03079406 0.001512454 0.0007750606
## depress  0.0044333191 0.000000000 0.06030914 0.022464804 0.0073575092
## nofriend 0.0307940626 0.060309138 0.00000000 0.021738038 0.0281159102
## height   0.0015124537 0.022464804 0.02173804 0.000000000 0.0090735884
## weight   0.0007750606 0.007357509 0.02811591 0.009073588 0.0000000000
## bmi      0.0002322522 0.005214166 0.01897374 0.014367597 0.0045497753
##                   bmi
## age      0.0002322522
## depress  0.0052141660
## nofriend 0.0189737418
## height   0.0143675968
## weight   0.0045497753
## bmi      0.0000000000
## 
## $parametric
##                  age     depress    nofriend      height      weight
## age      0.000000000 0.007714712 0.014681761 0.003200841 0.010056606
## depress  0.007714712 0.000000000 0.010808531 0.004848264 0.028897161
## nofriend 0.014681761 0.010808531 0.000000000 0.003685481 0.003859754
## height   0.003200841 0.004848264 0.003685481 0.000000000 0.011638121
## weight   0.010056606 0.028897161 0.003859754 0.011638121 0.000000000
## bmi      0.002370864 0.021800867 0.013845272 0.057643420 0.012537707
##                  bmi
## age      0.002370864
## depress  0.021800867
## nofriend 0.013845272
## height   0.057643420
## weight   0.012537707
## bmi      0.000000000
## 
## $bag
##                   age     depress     nofriend       height      weight
## age      0.0000000000 0.001710253 0.0019313069 0.0002058442 0.002148336
## depress  0.0017102533 0.000000000 0.0145395413 0.0029108221 0.004076937
## nofriend 0.0019313069 0.014539541 0.0000000000 0.0004175649 0.001332971
## height   0.0002058442 0.002910822 0.0004175649 0.0000000000 0.001852351
## weight   0.0021483364 0.004076937 0.0013329706 0.0018523508 0.000000000
## bmi      0.0064809368 0.005229491 0.0016666100 0.0176921062 0.004093548
##                  bmi
## age      0.006480937
## depress  0.005229491
## nofriend 0.001666610
## height   0.017692106
## weight   0.004093548
## bmi      0.000000000
## 
## $rf
##                   age     depress    nofriend       height      weight
## age      0.0000000000 0.130504373 0.009120415 0.0002058442 0.018812762
## depress  0.1305043725 0.000000000 0.020490702 0.0206234401 0.008193821
## nofriend 0.0091204149 0.020490702 0.000000000 0.0081823232 0.001867974
## height   0.0002058442 0.020623440 0.008182323 0.0000000000 0.026778473
## weight   0.0188127622 0.008193821 0.001867974 0.0267784732 0.000000000
## bmi      0.0192883137 0.019270555 0.001627250 0.0495285223 0.078375501
##                 bmi
## age      0.01928831
## depress  0.01927055
## nofriend 0.00162725
## height   0.04952852
## weight   0.07837550
## bmi      0.00000000
analyses$somme_cor_mat
##        sample      cart     ctree parametric       bag        rf
## [1,] 7.217924 0.1964182 0.4598228  0.4151787 0.1325772 0.8257405

liste_mat est une liste de 6 matrices. Ces matrices sont les matrices de corrélations moyenne des simulations pour chaque modèles moins la matrice de corrélation du jeu de données original.

somme_cor_mat est la somme des éléments de chaque matrices. Plus la valeur est proche de 0 plus les synthétisations conservent de bonnes corrélations.

bag et cart sont ici les meilleurs modèles suivis par parametric, ctree et rf. Sample est loin derrière.

MAE

analyses$table_mae
##               sex    agegr placesize    edu  socprof  marital       ls
## sample     27.198 19.76133  18.06667 22.741 15.87200 14.12333 14.85371
## cart       26.410 19.95400  19.85800 26.969 17.42800 14.36200 15.67943
## ctree      25.768 19.95400  18.13200 27.467 16.89867 14.32067 15.11143
## parametric 38.040 23.06400  20.13800 25.893 21.19022 17.54667 16.31657
## bag        40.754 19.95400 192.17333 78.989 59.63378 89.88933 93.87543
## rf         41.788 24.06933 152.09933 70.988 57.74089 90.39200 75.44000
##              depress     trust  trustfam trustneigh   sport   smoke alcabuse
## sample      9.464909  21.28000  13.53733   23.32267  26.298  23.796   12.494
## cart        9.673273  22.26133  14.54933   23.84267  26.454  25.848   13.238
## ctree       9.507455  18.89733  13.90000   23.69067  26.174  24.004   14.090
## parametric 14.076364  20.45333  15.87467   24.86400  26.360  23.884   13.456
## bag         9.418909 287.26133 174.53733  320.54400 166.342 296.732  144.102
## rf          9.896000 229.05467 151.76533  216.84000 161.964 263.904  149.360
##            alcsol    wkabint   englang
## sample     10.018  10.090667  21.31867
## cart        9.866   9.973333  22.88000
## ctree      10.018   9.808000  21.46667
## parametric  9.338  14.757333  22.69200
## bag        86.020 113.845333 120.91867
## rf         89.668 116.432000 133.30267

On remarque que bag et rf ont des MAE très élevé allant jusqu’à être 10 fois supérieurs aux autres modèles. Sample, cart, ctree et parametric sont assez rapprochés sans qu’il n’y ait une réelle domination d’un modèle.

MSE

analyses$table_mse
##                 age nofriend   height   weight      bmi
## sample     682.0771 103.7079 172.1206 452.3489 44.75372
## cart       682.0771 105.3914 172.0991 451.5839 44.57135
## ctree      682.0771 104.0041 172.1269 452.5496 45.17828
## parametric 682.0771 100.3660 171.4877 449.5742 51.54974
## bag        682.0771 102.5413 172.0911 451.3268 44.31593
## rf         682.0771 105.6129 172.0911 449.1485 43.84288

On ne voit pas de réelle domination d’un modèle.

Analyse de bmi

On va vérifier deux choses :

source("~/work/synthetic-data-sdc/R/fonctions/Graphiques_bmi.R")
bmi_comp(data)
##                             sample      cart    ctree parametric       bag
## Comparaison synth/synth 141.030740 -3.265265 4.803583  -2.208551 -1.878455
## Comparaison synth/org    -0.336147 -5.714436 5.493749  36.180675 -4.459721
##                               rf
## Comparaison synth/synth 32.36226
## Comparaison synth/org   15.89352
  1. On constate une assez bonne synthétisation via cart, ctree, parametric et bag, une moins bonne synthétisation via rf et une vraiment moins bonne synthétisation via sample. On n’a cependant pas une valeur de 0 ce qui signifie que le modèle s’approche de la relation mais ne la reproduit pas totalement.

  2. En ce qui concerne la comparaison au jeu de données original, sample, cart, ctree et bagging s’en sortent le mieux, suivis par rf puis parametric.

analyses$reg_coeff[2, ]
##        sample          cart         ctree    parametric           bag 
## -0.0007895939  0.9840424029  0.9816971902  1.0823844138  0.9853631891 
##            rf 
##  0.8362827945

reg_coeff est un vecteur comportant la moyenne des coefficients directeurs pour chaque modèles.

On voit que bag, cart et ctree sont très proches, suivis par parametric (x5), rf(x11). Sample est à la ramasse

source("~/work/synthetic-data-sdc/R/fonctions/Densites.R")
modele = "sample"
num_dataset = 1
plot_nuage_bmi(modele, num_dataset)

plot_reg_bmi()

## NULL
plot_dens_comb(data, "bmi")

plot_dens_syn_org(data, "bmi")
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

## 
## [[5]]

## 
## [[6]]

plot_dens_syn_org(data, "height")
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

## 
## [[5]]

## 
## [[6]]

plot_dens_syn_org(data, "weight")
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

## 
## [[5]]

## 
## [[6]]

Les densités de sample, cart, et ctree sont très ressemblantes. Celles de bag et rf le sont entre elles.

On remarque des pics sur les densités, on regarde donc les densités de height et weight pour voir s’ils viennent de là et en effet c’est le cas.

dens_bmi()
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

## 
## [[5]]

## 
## [[6]]

densite_diff(data, "bmi")[[1]]
##                                      sample          cart         ctree
## Moyenne différence d'aires    -4.455338e-06 -4.272978e-06 -5.168769e-06
## Ecart-type différence d'aires  3.549734e-06  4.937459e-06  3.143970e-06
## Somme différence d'aires       2.493844e-03  2.674153e-03  2.755653e-03
##                                  parametric           bag            rf
## Moyenne différence d'aires    -3.057157e-06 -4.983608e-06 -4.992414e-06
## Ecart-type différence d'aires  1.757596e-06  3.216030e-06  4.769962e-06
## Somme différence d'aires       1.574548e-03  2.733771e-03  2.953782e-03
bp_densite(data, "bmi")

for (i in 1:length(varsnum)) {
  print(bp_densite(data, varsnum[i]))
}

On constate que parametric est le modèle ayant l’aire moyenne de la densité de la variable bmi se rapprochant le plus de la densité de la variable bmi originale. Il est aussi le modèle ayant la plus petite variabilité. Cart est le modèle ayant la plus grande variabilté.

Mesures d’utilités

analyses$utility_measures_all_meth
## # A tibble: 3,000 × 5
##     pMSE SPECKS  PO50         U method
##    <dbl>  <dbl> <dbl>     <dbl> <chr> 
##  1 0.172  0.808  40.4 20114953  sample
##  2 0.181  0.837  41.8 20261681  sample
##  3 0.168  0.800  40.0 20024184. sample
##  4 0.179  0.829  41.4 20247699  sample
##  5 0.175  0.818  40.9 20107545  sample
##  6 0.180  0.834  41.7 20242382. sample
##  7 0.175  0.817  40.8 20150422. sample
##  8 0.167  0.801  40.0 19979623  sample
##  9 0.179  0.830  41.5 20208644. sample
## 10 0.175  0.819  41.0 20183083  sample
## # ℹ 2,990 more rows
source("~/work/synthetic-data-sdc/R/fonctions/Utilite.R")
moycum_mesures()

distribution_mesures()
## [[1]]
## Warning: `position_dodge()` requires non-overlapping x intervals.

## 
## [[2]]
## Warning: `position_dodge()` requires non-overlapping x intervals.

## 
## [[3]]
## Warning: `position_dodge()` requires non-overlapping x intervals.

## 
## [[4]]
## Warning: `position_dodge()` requires non-overlapping x intervals.

resume_mesures()

1) Sur le premier graphique, on remarque que les moyennes cumulées se stabilisent très rapidement. On remarque de plus que cart est le meilleur modèle en terme de pMSE. Il est suivi par rf, bag et ctree. Parametric arrive ensuite avec un pMSE environ 2 fois plus élevé. Enfin, sample a un pMSE d’environ de l’ordre de 7 fois supérieur.

  1. On constate que pour la plupart des modèles, l’étendue du pMSE est relativement contenue à l’exception de sample. Cart est ici le meilleur et sample est le moins bon et de loin.

  2. Concernant le SPECKS, on obtient les mêmes conclusions que pour le pMSE. On rappelle que le SPECKS est défini par : \[SPECKS = \sup_{\hat{p}}|F_{t=0}(\hat{p}_i) - \hat{F}_{t=1}(\hat{p}_i)|\]\(F\) est la fonction de répartition

  3. De même pour le PO50. On rappelle qu’il est défini par : \[PO50 = 100 \frac{\sum_i t_i(\hat{p}_i>c) + (1-t_i)(\hat{p}_i<c)}{\sum_i (\hat{p}_i \neq c)} - 50\]

  4. Enfin, pour le U, la différence est moins flagrante mais toujours avec sample en dernière place. On rappelle qu’il est défini par : La somme des rangs de \(\hat{p}_i\)\(t_i = 1\) dans l’ordre de \(\hat{p}_i\)

Recherche des individus répliqués

analyses$nb_repliques_all_meth %>% 
  group_by(method) %>% 
  summarise(across(n_replicats, list(mean=mean, min=min, max=max, sd=sd)))
## # A tibble: 6 × 5
##   method     n_replicats_mean n_replicats_min n_replicats_max n_replicats_sd
##   <chr>                 <dbl>           <int>           <int>          <dbl>
## 1 bag                  10.8                 1              19         3.34  
## 2 cart                  1.03                0               6         1.04  
## 3 ctree                 0.002               0               1         0.0447
## 4 parametric            0                   0               0         0     
## 5 rf                    0.388               0               3         0.612 
## 6 sample                0                   0               0         0

Les modèles parametric et sample ne produisent aucun individu répliqué. Pour ctree, sur 500 synthétisations, 1 jeu de données possède au moins un individu répliqué Cart produit en moyenne 1 jeu de données